package com.atguigu.lease.web.admin.schedule;

import com.atguigu.lease.model.entity.LeaseAgreement;
import com.atguigu.lease.model.enums.LeaseStatus;
import com.atguigu.lease.web.admin.service.LeaseAgreementService;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import lombok.extern.log4j.Log4j2;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * ClassName: ScheduledTasks
 * Package: com.atguigu.lease.web.admin.schedule
 * Description:
 *
 * @Autor: xvyy
 * @Create: 2024/11/20 - 14:10
 * @Version: v1.0
 */
@Component
@Slf4j
@Log4j2
public class ScheduledTasks {

    @Autowired
    private LeaseAgreementService leaseAgreementService;

    //todo 定时任务
    // cron : 表达式 : 秒 分 时 日 月 周 年 七位 一般是六位
    // cron 启动必须是 部署在tomcat服务器上
    // 每天中午12:00 执行一次
    @Scheduled(cron = "0 0 12 * * ? ")
    public void updateLeaseAgreementStatus() {
        log.info("定时任务执行了");
        //todo 修改租约状态
        LambdaUpdateWrapper<LeaseAgreement> wrapper = new LambdaUpdateWrapper<>();
        //todo 等于0的状态 修改为1
        // .like : 模糊查询 .notLike : 模糊查询 .isNull : 为空 .is
        // .eq : 等于 .le : 小于 .lt : 小于 .ge : 大于 .gt : 大于 .ne : 不等于
        // .in : 在 .notIn : 不在 .between : 在范围 .notBetween : 不在范围
        // .like : 模糊查询 .notLike : 模糊查询 .isNull : 为空 .is
        log.info(new Date().toString());
        wrapper
                .le(LeaseAgreement::getLeaseEndDate, new Date())
                .in(LeaseAgreement::getStatus, LeaseStatus.SIGNED, LeaseStatus.WITHDRAWING)
                .set(LeaseAgreement::getStatus, LeaseStatus.EXPIRED);

        leaseAgreementService.update(wrapper);
    }
}
